package com.busi.controller.revexchange;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import com.busi.util.DateUtil;
import com.busi.util.FtpUtil;
import com.busi.util.HttpUtils;
import com.busi.util.PropertyUtil;
import com.busi.util.SFtp;
import com.busi.util.SFtpUtil;
import com.busi.util.StringUtil;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.SftpException;
import com.jfinal.upload.UploadFile;
import com.zcurd.controller.BaseController;


   

/** ******************  类说明  *********************
 * class       :  ReverseExchangeController
 * @author     :  zhurouyu
 * @version    :  1.0  
 * description :  反向兑换文件上传
 * @see        :                        
 * ************************************************/   
public class ReverseExchangeController extends BaseController {
	
	     
	/** ********************************************
	 * method name   : fileUpload 
	 * description   : 跳转到文件上传页面
	 * @return       : void
	 * @param        : 
	 * modified      : zhurouyu ,  2017年5月3日  下午5:40:17
	 * @see          : 
	 * ********************************************/      
	public void fileUpload(){
		render("fileupload.html");
	}
	
	/** ********************************************
	 * method name   : upload
	 * description   : 上传文件
	 * @return       : void
	 * @param        : 
	 * modified      : zhurouyu ,  2017年5月4日  下午3:20:49
	 * @see          : 
	 * ********************************************/      
	public void upload() {
		UploadFile uploadfile = getFile("exchangefile");
		String fileName = uploadfile.getOriginalFileName();
		if(!fileName.endsWith("dat")){
			renderFailed("文件格式不正确，请重新上传dat格式文件");
			return;
		}
		String filePath = fileName.substring(9, 17);
		String date = DateUtil.getRollDate(-1);
		if(!date.equals(filePath)){
			renderFailed("当日只处理前一天的反向兑换文件，请核对好日期后重新上传");
			return;
		}
		LOG.info("#upload() 需要上传的反向兑换文件为："+fileName);
		String host = PropertyUtil.getStrValue("file.host", "");
		String port = PropertyUtil.getStrValue("file.port", "");
		String username = PropertyUtil.getStrValue("file.username", "");
		String password = PropertyUtil.getStrValue("file.password", "");
		String basePath = PropertyUtil.getStrValue("file.basePath", "");
		String directory = basePath + filePath;
		LOG.info("#upload() 上传文件路径为："+ directory);
		String uploadPath = uploadfile.getUploadPath();//获取保存文件的文件夹
		String fileName1 = uploadfile.getFileName();//获取保存文件的文件名
		String filePath1 = uploadPath + File.separator + fileName1;//保存文件的路径
		File exfile = uploadfile.getFile();
		try {
			ChannelSftp sftp = SFtpUtil.getConnect(username, host, password, basePath, null);
			//判断文件是否存在
			boolean exits = SFtpUtil.isFileExist(directory+"/"+fileName,sftp);
			if(exits){
				//存在就删除
				SFtpUtil.delete(directory, fileName, sftp);
			}
			boolean isok = SFtpUtil.upload(directory,filePath1, sftp,fileName);
			if(!isok){
				renderFailed("上传文件失败！");
				return;
			}
		} catch (Exception e) {
			e.printStackTrace();
			renderFailed("上传文件失败！");
			return;
			
		} 
		String domain = PropertyUtil.getStrValue("platform.butler.domain", "");
		String url = domain+"/api/reverseexchange/exchange";
		String ret = HttpUtils.doGet(url, null, 3, 60, "utf-8");
		LOG.info("#upload() 反向兑换处理接口url:"+url+",返回结果:"+ret);
		if(StringUtil.isBlank(ret)){
			renderFailed("系统超时，请稍候再试！");
			return;
		}
		if ("0".equals(ret)){
			renderFailed("系统异常，请稍候再试！");
			return;
		}
		renderSuccess("恭喜上传文件成功！");
	}
	
}
